home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / tools / mkdep < prev   
Text File  |  1993-01-11  |  4KB  |  156 lines

  1. #!/bin/sh -
  2. #
  3. # Copyright (c) 1987 Regents of the University of California.
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms are permitted
  7. # provided that this notice is preserved and that due credit is given
  8. # to the University of California at Berkeley. The name of the University
  9. # may not be used to endorse or promote products derived from this
  10. # software without specific prior written permission. This software
  11. # is provided ``as is'' without express or implied warranty.
  12. #
  13. #    @(#)mkdep.sh    5.9 (Berkeley) 1/1/88
  14. # Mods:
  15. #   Added -f, -P and -S flags.
  16. #
  17. #
  18.  
  19. PATH=/bin:/usr/bin:/usr/ucb:$PATH
  20. export PATH
  21.  
  22. MAKE=Makefile            # By default edit "Makefile"
  23. Mflag=-M
  24. Prefix=
  25.  
  26. while :
  27.     do case "$1" in
  28.         # -f allows you to select a makefile name
  29.         -f) MAKE=$2; shift 2 ;;
  30.  
  31.         # the -p flag produces "program: program.c" style dependencies
  32.         # so .o's don't get produced
  33.         -p)
  34.             SED='s;\.o;;'
  35.             shift ;;
  36.         # the -P prefixstring flag prepends "prefixstring"
  37.         # to every non-absolute pathname appearing as a dependency
  38.         -P)
  39.             Prefix="$2"; shift 2 ;;
  40.         -S)
  41.             Srctoo=1; shift ;;
  42.         -MM)
  43.             Mflag=-MM; shift ;;
  44.         *)
  45.             break ;;
  46.     esac
  47. done
  48.  
  49. if [ $# = 0 ] ; then
  50.     echo \
  51. 'Usage: mkdep [-p] [-f make-depend-file] [-P prefix] [-S] file ...
  52. Writes include-file dependencies to make-depend-file (default "Makefile").
  53.  -p        Produce  program: program.c  dependencies, avoiding .o'"'"'s.
  54.  -f file    Edit (or create) dependencies into that file rather than Makefile
  55.  -P prefix  Prepend "prefix" to all dependencies with non-absolute paths.
  56.  -S        For each source file add dependency basename-of-file.o: file.c' >&2
  57.     exit 1
  58. fi
  59.  
  60. if [ ! -w "$MAKE" ]; then
  61.     if [ ! -f "$MAKE" ]; then
  62.     touch "$MAKE"
  63.     else
  64.     mv -f "$MAKE" "$MAKE".bak
  65.     cp "$MAKE".bak "$MAKE"
  66.     rm -f "$MAKE".bak
  67.     fi
  68.     chmod a+w "$MAKE"
  69.     if [ ! -w "$MAKE" ]; then
  70.     echo "mkdep: no writeable file \"$MAKE\""
  71.     exit 1
  72.     fi
  73. fi
  74.  
  75. TMP=/tmp/mkdep$$
  76.  
  77. trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
  78.  
  79. cp $MAKE ${MAKE}.bak
  80.  
  81. sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
  82.  
  83. cat << _EOF_ >> $TMP
  84. # DO NOT DELETE THIS LINE -- mkdep uses it.
  85. # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
  86.  
  87. _EOF_
  88.  
  89. #
  90. # The sed script does the following:
  91. #   squeezes multiple spaces & tabs to a single space
  92. #   Ensures dependencies have the form <target>:<SP><item><SP><item>...
  93. #   Applies -P prefix to relative pathnames of dependencies
  94. #   Discards system include files: /usr/include/* and /NextDeveloper/Headers/*.
  95. ${CC} ${Mflag:-"-M"} $@ | \
  96.   /bin/sed -e "
  97.     s'[     ][     ]*' 'g
  98.     s' *\\\\ *$''
  99.     s' *: *': '
  100.     s' \./' 'g
  101.     s' \([^/]\)' ${Prefix}\1'g
  102.     s' /usr/include/[^ ]*''
  103.     s' /NextDeveloper/Headers/[^ ]*''g
  104.     $SED" | \
  105.   awk '{
  106.     if($1 ~ /:/) {
  107.         target = $1;
  108.         i = 2;
  109.         if (target != prev) {
  110.         if (rec != "") print rec;
  111.         rec = target;
  112.         prev = target;
  113.         }
  114.     } else {
  115.         i = 1;
  116.     }
  117.     while(i <= NF) {
  118.         nrec = rec " " $i;
  119.         if(length(nrec) > 78) {
  120.         print rec " \\";
  121.         nrec = "   " $i;
  122.         }
  123.         rec = nrec;
  124.         i++;
  125.     }
  126. }
  127. END {
  128.     print rec;
  129. } ' >> $TMP
  130.  
  131. #
  132. # Work around NeXT 3.0 cc anomaly: cc -M does not include the source file
  133. # among the dependencies.  OOGL makefile layout needs this.
  134. #
  135. if [ "$Srctoo" != "" ]; then
  136.     echo $@ | tr -s ' \11'  '\12\12' | \
  137.     awk '
  138.     /^[^-].*\.[cm]/ {
  139.         src = $1;
  140.         ns = split(src, basename, "/");
  141.         obj = basename[ns];
  142.         if(src !~ /^\//) src = "'"$Prefix"'" src;
  143.         print substr(obj, 1, length(obj)-1) "o: " src;
  144.     }' >>$TMP
  145. fi
  146.         
  147. cat << _EOF_ >> $TMP
  148.  
  149. # IF YOU PUT ANYTHING HERE IT WILL GO AWAY
  150. _EOF_
  151.  
  152. # copy to preserve permissions
  153. cp $TMP $MAKE || mv $TMP $MAKE
  154. rm -f ${MAKE}.bak $TMP
  155. exit 0
  156.